Computer Forum voor al uw vragen en problemen.

Register een gratis account om van alle functies op het forum gebruik te kunnen maken.

Problemen met uw computer, of heeft u advies nodig? PC Web Plus helpt u graag verder.

Welkom op PC Web Plus, op dit computerforum kunt u terecht voor gratis hulp bij computerproblemen en allerhande vragen over software, hardware en computerbeveiliging.

Als gast kunt u alleen het forum bekijken en meelezen met de verschillende discussies. U kunt echter geen reacties of commentaar geven op bestaande discussies, of nieuwe onderwerpen op het forum starten met uw vraag of probleem.

Klik op de onderstaande link om geheel gratis een gebruikersaccount op ons forum te registreren. Vanaf dat moment kunt u deelnemen aan de diverse discussies op het forum.

Klik hier om een gratis account te registreren! - of lees onze Welkomstgids door voor meer informatie over het gebruik van het forum.

 
Gebruikersavatar
Kami
Security colleague
Security colleague
Onderwerp Auteur
Berichten: 13
Lid geworden op: do 28 feb, 2013 08:54:17
Kennisniveau: (2) Ervaren
OS: Windows/Linux
AV: ESET
FW: ESET/pfSense

[Handleiding] - Zelf een website hosten met Linux, nginx, PHP-FPM en MariaDB/MySQL

za 13 jul, 2013 11:38:10

Hallo,

Voor de mensen die graag een eigen website willen hosten via een thuisserver of een VPS is hier een handleiding. Het voordeel hiervan tegenover shared-webhosting is dat je veel meer vrijheid hebt en alles kan installeren wat je maar wilt. Bovendien heb je op een eigen server of VPS meestal flink wat extra snelheid.

Ik host zelf al een tijdje wat websites voor wat mensen en ik doe dat op een machine met daarop:
- Debian Linux Distributie.
- PHP-FPM/FastCGI - een processmanager voor PHP. Deze draait los op het systeem (maar kan ook extern draaien) en alle PHP-scrips worden hierdoor afgehandeld. De rest wordt door de webserver (nginx) afgehandeld.
- MariaDB - Oorspronkelijk een fork van MySQL. MySQL is een tijdje geleden door Oracle overgenomen. Sindsdien gaat het zoals verwacht slechter met MySQL en wordt er ook niet veel informatie over updates en vulnerabilities weggegeven. MariaDB kan gebruikt worden als vervanger van MySQL en is wel gewoon helemaal open.
- nginx - De webserver. Je zult misschien eerder Apache verwachten, maar ik ben hier persoonlijk niet zo'n fan van. Nginx wordt steeds populairder en zal hopelijk en waarschijnlijk Apache op termijn gaan inhalen.

- SFTP/Chroot - Standaard zullen hosters vaak FTP gebruiken om bestanden over te zetten. Dit is echter erg onveilig omdat het wachtwoord dan plain-text over het netwerk gaat. Iedereen zou het dus kunnen uitlezen. Gelukkig heb je bij een eigen server toegang tot SSH en kun je dus via een versleutelde verbinding inloggen. SFTP maakt gebruikt van SSH om bestanden over te zetten. Daarnaast kan deze zo ingericht worden dat de gebruiker alleen toegang heeft tot zijn eigen mappen. Denk hierbij aan de logs/public_html mappen voor de website. Oftewel, een chrooted omgeving.

Allereerst, ik ga er van uit dat je al een Linux installatie hebt. Deze handleiding is voor Debian 7 geschreven.


Stap 1: SSH/SFTP Chroot
  • Log in via SSH op je server als root user. Als je een VPS hebt zal SSH standaard aanstaan, anders zul je SSH eerst even moeten installeren via de console. Dit kan met het commando "apt-get install ssh". Onder windows kun je het programma Putty gebruiken om via SSH in te loggen. Onder OSX/Linux is het SSH commando ( ssh root@ip) standaard aanwezig.
  • Vervolgens gaan we een groep aanmaken. Alle gebruikers in deze groep zullen in een SSH Chroot gezet worden. Zet de root gebruiker dus nooit in deze groep. Alleen andere gebruikers. Voer het commando addgroup filetransfer uit.
  • Vervolgens de SSH config. Voer het commando nano /etc/ssh/sshd_config uit. De configuratie wordt in een editor geopend. Verwijder alles wat hier staat (CTRL+K ingedrukt houden).
    Voer vervolgens het volgende in:
    Port 22
    Protocol 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    UsePrivilegeSeparation yes
    KeyRegenerationInterval 3600
    ServerKeyBits 768
    SyslogFacility AUTH
    LogLevel INFO
    LoginGraceTime 120
    PermitRootLogin yes
    StrictModes yes
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      %h/.ssh/authorized_keys
    IgnoreRhosts yes
    RhostsRSAAuthentication no
    HostbasedAuthentication no
    PermitEmptyPasswords no
    ChallengeResponseAuthentication no
    PasswordAuthentication no
    X11Forwarding no
    X11DisplayOffset 10
    PrintMotd no
    PrintLastLog yes
    TCPKeepAlive yes
    UseDNS no
    AcceptEnv LANG LC_*
    Subsystem sftp internal-sftp
    UsePAM no
        Match group filetransfer
        ChrootDirectory %h
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

    Match user root
    PasswordAuthentication yes
  • Je kunt opslaan met CTRL + O , vervolgens op ENTER.
  • Vervolgens moet ssh een restart krijgen. Dit kan met het commando service ssh try-restart
  • Het is nu mogelijk om gebruikers te chrooten als ze via SSH inloggen. We moeten nog wel een gebruiker aanmaken. We springen even vooruit, want een gebruiker moet ook een homedirectory hebben waar hij uitkomt tijdens het inloggen.
    We gaan daarom eerst deze omgeving aanmaken. Voer de volgende commando's uit:
    mkdir -p /srv/www/domein/public_html
    mkdir -p /srv/www/domein/tmp
    mkdir -p /srv/www/domein/logs

    Vervang hierbij "domein" met de domeinnaam die je wilt gaan gebruiken voor je site.
    Vervolgens gaan we de gebruiker aanmaken:
    groupadd gebruikersnaam
    useradd -g gebruikersnaam -G filetransfer -d /srv/www/domein/ -s /usr/sbin/nologin gebruikersnaam

    Vervang hierbij "gebruikersnaam" met de naam die deze gebruiker moet krijgen.
    Vervolgens nog een wachtwoord instellen.
    passwd gebruikersnaam
  • Nice - de gebruiker bestaat. Nu moeten we deze gebruiker nog toe staan om in te loggen met een wachtwoord via de SSH config. Hiervoor kun je het volgende doen:
    echo "Match user gebruikersnaam" >> /etc/ssh/sshd_config
    echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
    service ssh try-restart
  • De SSH/SFTP Chroot is hiermee volledig opgezet. De eerste gebruiker is al aangemaakt! We gaan nu MariaDB installeren.

Stap 2: MariaDB installeren
  • Voer de volgende commando's uit:

    apt-get install python-software-properties
    apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
    echo "deb http://mirrors.supportex.net/mariadb/repo/10.0/debian wheezy main" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.supportex.net/mariadb/repo/10.0/debian wheezy main" >> /etc/apt/sources.list
    apt-get update
    apt-get install mariadb-server
  • Tijdens de installatie vraagt MariaDB om een wachtwoord. Dit gaat het wachtwoord worden voor de root user van MySQL. Kies dus een sterk wachtwoord.
  • Na de installatie gaan we een paar dingen aanpassen aan de configuratie. De "beste" instellingen verschillen per server, maar dit is wat ik zelf gebruik voor mijn 1GB/RAM servers:
    echo "" > /etc/mysql/my.cnf
    nano /etc/mysql/my.cnf

    Plaats hier het volgende:
    [client]
    port            = 3306
    socket          = /var/run/mysqld/mysqld.sock

    [mysqld_safe]
    socket          = /var/run/mysqld/mysqld.sock
    nice            = 0

    [mysqld]
    user            = mysql
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    port            = 3306
    basedir         = /usr
    datadir         = /var/lib/mysql
    tmpdir          = /tmp
    default-storage-engine = innodb
    skip-external-locking
    bind-address           = 127.0.0.1
    key_buffer              = 128M
    join_buffer_size        = 1M
    read_buffer_size        = 1M
    sort_buffer_size        = 1M
    myisam_sort_buffer_size = 32M
    thread_cache_size       = 286
    max_allowed_packet      = 16M
    thread_stack            = 192K
    thread_cache_size       = 10
    myisam-recover         = BACKUP
    table_cache            = 3000
    query_cache_limit       = 1M
    query_cache_size        = 64M
    expire_logs_days        = 10
    max_binlog_size         = 100M
    table_open_cache        = 500
    innodb_file_per_table   = ON
    long_query_time         = 10
    #wait_timeout           = 10
    #connect_timeout        = 10
    #interactive_timeout    = 10
    tmp_table_size          = 64M
    max_heap_table_size     = 64M
    [mysqldump]
    quick
    quote-names
    max_allowed_packet      = 16M
    [mysql]
    [isamchk]
    key_buffer              = 64M
    sort_buffer             = 64M
    read_buffer             = 16M
    write_buffer            = 16M
    !includedir /etc/mysql/conf.d/

    # you can't just change log file size, requires special procedure
    innodb_buffer_pool_size = 256M
    innodb_log_buffer_size  = 8M
    innodb_file_per_table   = 1
    innodb_open_files       = 400
    innodb_io_capacity      = 1000
    innodb_flush_method     = O_DIRECT

    Vervolgens herstarten we MariaDB:
    service mysql restart
    MySQL is nu opgezet. Nice! Voor het aanmaken van databases gaan we straks als PHP/nginx ook draaien phpmyadmin opzetten. Je kunt hiermee makkelijk MySQL users en databases aanmaken.
    We gaan nu PHP Installeren.

Stap 3: PHP-FPM
    De Debian Repository gebruikt wat oudere versies, maar wel veilig en stabiel. Ik zelf wil graag de laatste versie, dus ik gebruik hiervoor een aparte Repository. De Dotdeb repository. Deze gaan we nu toevoegen:
    echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
    echo "deb-src http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
    echo "deb http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list
    echo "deb-src http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list
    wget http://www.dotdeb.org/dotdeb.gpg
    cat dotdeb.gpg | apt-key add -
    rm dotdeb.gpg
    apt-get update
    apt-get install php5-fpm
    PHP5-FPM is nu geïnstalleerd. Vervolgens nog wat instellingen wijzigen:
    echo "" > /etc/php5/fpm/php.ini
    nano /etc/php5/fpm/php.ini

    Plaats hierin het volgende:
    [PHP]
    engine = On
    short_open_tag = Off
    asp_tags = Off
    precision = 14
    output_buffering = 4096
    zlib.output_compression = Off
    implicit_flush = Off
    unserialize_callback_func =
    serialize_precision = 17
    disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
    disable_classes =
    zend.enable_gc = On
    expose_php = On
    max_execution_time = 30
    max_input_time = 60
    memory_limit = 128M
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    display_errors = Off
    display_startup_errors = Off
    log_errors = On
    log_errors_max_len = 1024
    ignore_repeated_errors = Off
    ignore_repeated_source = Off
    report_memleaks = On
    track_errors = Off
    html_errors = On
    variables_order = "GPCS"
    request_order = "GP"
    register_argc_argv = Off
    auto_globals_jit = On
    post_max_size = 20M
    auto_prepend_file =
    auto_append_file =
    default_mimetype = "text/html"
    doc_root =
    user_dir =
    enable_dl = Off
    cgi.fix_pathinfo=0
    file_uploads = On
    upload_max_filesize = 20M
    max_file_uploads = 20
    allow_url_fopen = On
    allow_url_include = Off
    default_socket_timeout = 60
    [CLI Server]
    cli_server.color = On
    [Date]
    [filter]
    [iconv]
    [intl]
    [sqlite]
    [sqlite3]
    [Pcre]
    [Pdo]
    [Pdo_mysql]
    pdo_mysql.cache_size = 2000
    pdo_mysql.default_socket=
    [Phar]
    [mail function]
    SMTP = localhost
    smtp_port = 25
    mail.add_x_header = On
    [SQL]
    sql.safe_mode = Off
    [ODBC]
    odbc.allow_persistent = On
    odbc.check_persistent = On
    odbc.max_persistent = -1
    odbc.max_links = -1
    odbc.defaultlrl = 4096
    odbc.defaultbinmode = 1
    [Interbase]
    ibase.allow_persistent = 1
    ibase.max_persistent = -1
    ibase.max_links = -1
    ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
    ibase.dateformat = "%Y-%m-%d"
    ibase.timeformat = "%H:%M:%S"
    [MySQL]
    mysql.allow_local_infile = On
    mysql.allow_persistent = On
    mysql.cache_size = 2000
    mysql.max_persistent = -1
    mysql.max_links = -1
    mysql.default_port =
    mysql.default_socket =
    mysql.default_host =
    mysql.default_user =
    mysql.default_password =
    mysql.connect_timeout = 60
    mysql.trace_mode = Off
    [MySQLi]
    mysqli.max_persistent = -1
    mysqli.allow_persistent = On
    mysqli.max_links = -1
    mysqli.cache_size = 2000
    mysqli.default_port = 3306
    mysqli.default_socket =
    mysqli.default_host =
    mysqli.default_user =
    mysqli.default_pw =
    mysqli.reconnect = Off
    [mysqlnd]
    mysqlnd.collect_statistics = On
    mysqlnd.collect_memory_statistics = Off
    [OCI8]
    [PostgreSQL]
    pgsql.allow_persistent = On
    pgsql.auto_reset_persistent = Off
    pgsql.max_persistent = -1
    pgsql.max_links = -1
    pgsql.ignore_notice = 0
    pgsql.log_notice = 0
    [Sybase-CT]
    sybct.allow_persistent = On
    sybct.max_persistent = -1
    sybct.max_links = -1
    sybct.min_server_severity = 10
    sybct.min_client_severity = 10
    [bcmath]
    bcmath.scale = 0
    [browscap]
    [Session]
    session.save_handler = files
    session.use_cookies = 1
    session.use_only_cookies = 1
    session.name = PHPSESSID
    session.auto_start = 0
    session.cookie_lifetime = 0
    session.cookie_path = /
    session.cookie_domain =
    session.cookie_httponly =
    session.serialize_handler = php
    session.gc_probability = 0
    session.gc_divisor = 1000
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = Off
    session.bug_compat_warn = Off
    session.referer_check =
    session.cache_limiter = nocache
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 5
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
    [MSSQL]
    mssql.allow_persistent = On
    mssql.max_persistent = -1
    mssql.max_links = -1
    mssql.min_error_severity = 10
    mssql.min_message_severity = 10
    mssql.compatability_mode = Off
    mssql.secure_connection = Off
    [Assertion]
    [COM]
    [mbstring]
    [gd]
    [exif]
    [Tidy]
    tidy.clean_output = Off
    [soap]
    soap.wsdl_cache_enabled=1
    soap.wsdl_cache_dir="/tmp"
    soap.wsdl_cache_ttl=86400
    soap.wsdl_cache_limit = 5
    [sysvshm]
    [ldap]
    ldap.max_links = -1
    [mcrypt]
    [dba]
    [opcache]

    echo "" > /etc/php5/fpm/php-fpm.conf
    nano /etc/php5/fpm/php-fpm.conf

    Plaats hierin het volgende:
    [global]
    pid = /var/run/php5-fpm.pid
    error_log = /var/log/php5-fpm.log
    emergency_restart_threshold = 10
    emergency_restart_interval = 1m
    process_control_timeout = 10s
    process.max = 64


    include=/etc/php5/fpm/pool.d/*.conf

    Vervolgens verwijderen we de standaard configuratie pool:
    rm /etc/php5/fpm/pool.d/*conf
    We gaan nu een nieuwe pool maken. Let hierbij goed op dat je de zelfde waardes gebruikt die je eerder al voor de domeinnaam en de gebruikersnaam gebruikt hebt (in stap 1).
    nano /etc/php5/fpm/pool.d/domein.conf
    Vervang overal domein en gebruikersnaam met de waardes die je eerder al gebruikt hebt. Voer het volgende in bij de editor:
    [gebruikersnaam]
    user = gebruikersnaam
    group = gebruikersnaam
    listen = /srv/www/domein/tmp/php-fpm-gebruikersnaam.sock
    listen.owner = gebruikersnaam
    listen.group = gebruikersnaam
    listen.mode = 0666
    pm = dynamic
    pm.max_children = 9
    pm.start_servers = 3
    pm.min_spare_servers = 2
    pm.max_spare_servers = 3
    pm.max_requests = 500
    chdir = /
    php_admin_value[open_basedir] = /srv/www/domein/public_html:/srv/www/domein/tmp:/usr/share/php5:/usr/share/php
    php_admin_value[disable_functions] = apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode, symlink
    php_flag[expose_php] = off
    php_value[memory_limit] = 128M
    php_admin_value[upload_tmp_dir] = "/srv/www/domein/tmp/"

  • Vervolgens PHP herstarten:
    service php5-fpm restart

    Mooi! Nu draaien MariaDB en PHP. Daarnaast is er een gebruiker waarvandaan de content getoont kan worden. Nu alleen nog de webserver zelf.
Stap 4: - nginx
    apt-get install nginx
    echo "" > /etc/nginx/nginx.conf
    nano /etc/nginx/nginx.conf
    Plaats hierin het volgende. Let op dat ik in de configfiles voor nginx soms [::] gebruik. Dit slaat op IPv6. Indien jouw server geen IPv6 adressen heeft dan zul je deze regels moeten verwijderen.
    user www-data;
    worker_processes 4;
    pid /var/run/nginx.pid;


    events
    {
            worker_connections 1024;
    }
    http
    {
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 5 5;
            types_hash_max_size 2048;
            server_tokens off;
            etag off;

            # Allow 20M POST
            client_max_body_size 20m;
            client_body_buffer_size 128k;
            client_header_buffer_size 128k;
            large_client_header_buffers 8 128k;

            include /etc/nginx/mime.types;
            default_type application/octet-stream;

            gzip on;
            gzip_disable "msie6";

            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 6;
            gzip_buffers 16 8k;
            gzip_http_version 1.1;
            gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

            server
            {
                    listen 80;
                    listen [::]:80  default ipv6only=on;

                    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$
                    {
                    expires           360d;
                    }

                    location ~ /\.
                    {
                    access_log off;
                    log_not_found off;
                    deny all;
                    }

                    location /
                    {
                    index index.html index.htm index.php;
                    }

            }

            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;

    }

    Vervolgens de standaard vhost verwijderen en nieuwe aanmaken:
    rm /etc/nginx/sites-enabled/*
    rm /etc/nginx/sites-available/*
    nano /etc/nginx/sites-available/domein

    Let op dat je hierbij weer dezelfde waardes aanhoudt met de domeinnaam en gebruikersnaam. Anders gaat het niet werken:
    server
    {
            listen 80;
            listen [::]:80;
            server_name domein www.domein;
            client_max_body_size 20m;
            client_body_buffer_size 128k;
            access_log /srv/www/domein/logs/access.log;
            error_log /srv/www/domein/logs/error.log;
            root /srv/www/domein/public_html;
            add_header X-Frame-Options SAMEORIGIN;
            index index.html index.htm index.php;

            location ~ /\.
            {
                    access_log off;
                    log_not_found off;
                    deny all;
            }

            ## Only allow these request methods ##
            if ($request_method !~ ^(GET|HEAD|POST)$ )
            {
                    return 444;
            }
            ## Do not accept DELETE, SEARCH and other methods ##

            # Pass all .php files onto a php-fpm/php-fcgi server.
            location ~ \.php$
            {
                    # Important, don't remove for security reasons
                    try_files $uri =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    include fastcgi_params;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_pass unix:/srv/www/domein/tmp/php-fpm-gebruikersnaam.sock;
            }
    }

    Vervolgens de vhost enablen en nginx herstarten:
    ln -s /etc/nginx/sites-available/domein /etc/nginx/sites-enabled/domein
    service nginx restart


    We gaan ook nog even wat permissies wijzigen op de vhost. Eerder kon dit niet omdat nginx nog niet geïnstalleerd was.

    chown -R gebruikersnaam:www-data /srv/www/domein/logs/
    chown -R gebruikersnaam:www-data /srv/www/domein/public_html/
    chown -R gebruikersnaam:www-data /srv/www/domein/tmp
    chmod 0710 /srv/www/domein/logs/
    chmod 0710 /srv/www/domein/public_html/
    chmod 0710 /srv/www/domein/tmp/

Als het goed is draait alles nu. Als je een echt domein hebt en deze staat naar het IP van je server toe gewezen dan kun je de site nu bereiken.
Als je geen echte domein hebt dan zul je in de hostsfile dit moeten aanpassen. Onder Linux/OSX is dit /etc/hosts en bij Windows "C:\Windows\System32\drivers\etc\hosts".
Instellen gaat als volgt:
x.x.x.x domein http://www.domein
dus bijvoorbeeld:
1.2.3.4 nu.nl http://www.nu.nl

Om bestanden te uploaden & te testen of alles werkt kun je via SFTP inloggen.
Dit kan met de meeste FTP clients, zoals Filezilla:
Hostname: sftp://gebruikersnaam@ip en het bijbehorende wachtwoord
Alle bestanden die je in de public_html zet zullen worden weergegeven. Je kunt testen of PHP werkt door bv. het volgende bestand aan te maken in de public_html:
info.php
<?php
phpinfo();
?>

Als je deze aanroept krijg je als het goed is een pagina met de informatie over PHP te zien. Nice!
Alleen nog een paar extensies installeren die handig kunnen zijn:
apt-get install php5-mcrypt php5-mysqlnd php5-gd


We kunnen nu ook nog PHPMyAdmin installeren. Hiermee kun je de database makkelijk beheren. Dit is ook gelijk een leuke oefening. Maak volgens de stappen die hierboven beschreven staan een nieuwe gebruiker aan, een nieuwe PHP-FPM pool en een nieuwe nginx vhost.
Vergeet niet om deze gebruiker ook toegang te geven om via SSH met een wachtwoord in te loggen en om nginx/PHP-FPM te reloaden nadat je de pool en vhost hebt aangemaakt.
Als domein kun je bijvoorbeeld phpmyadmin.domein gebruiken (dus phpmyadmin.voorbeeld.nl). Vergeet niet om een DNS wijziging te maken of om dit door te voeren in je HOSTS bestand.
Plaats vervolgens in de public_html de PHPMyAdmin bestanden. Deze kun je hier downloaden.
Vervolgens moet je alleen nog even een config.inc.php aanmaken in de public_html. Hierin zet je de volgende instellingen:
<?php
$cfg['blowfish_secret'] = 'WACHTWOORD';  // use here a value of your choice

$i=0;
$i++;
$cfg['Servers'][$i]['auth_type']     = 'cookie';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['PmaNoRelation_DisableWarning'] = true;
?>

Vervang bij het bovenstaande "WACHTWOORD" met een lange string. Deze hoef je verder niet te onthouden maar moet je wel instellen.

Je kunt nu de phpmyadmin pagina benaderen en inloggen met de gegevens die je tijdens de MariaDB installatie hebt gebruikt inloggen. Dus voor de MySQL Root gebruiker.

------

Ik zelf gebruik hier een scriptje voor dat ik geschreven heb om nieuwe gebruikers aan te maken. Als je de tutorial volledig gevolgd hebt kun je deze ook gebruiken. Let er wel op dat deze specifiek voor mijn wensen is ingesteld, dus als je dingen anders wilt zul je het handmatig moeten doen (of zelf een scriptje maken)
Bij deze het scriptje:

#!/bin/bash

##
# KamiNuvini - kami@nuvini.com
# This script does the following:
# 1. Create directory for new user. This directory will have a public_html, logs and tmp folder by default.
# 2. Add user, SFTP Chroot them, disallow normal SSH access. Allow PasswordAuthentication for user.
# 3. Add separate PHP-FPM Pool for user.
# 4. Add nginx-vhost and enable it.
# 5. Setting up directory permissions.
# 6. Restarting Services
# Note that SFTP chrooting must be set up prior to running this script. The SFTP Chroot condition is the group
# filetransfer.
##

## Fetching Variables
echo -n "Give domain name:  "
read DOMAIN
echo -n "Give username:  "
read USER

# Homedir location, please set at least 2 levels deep for proper chrooting.
HOMEDIR=/srv/www/$DOMAIN

## 1. Creating directories
mkdir -p $HOMEDIR/public_html
mkdir -p $HOMEDIR/tmp
mkdir -p $HOMEDIR/logs

## 2. Creating User
groupadd $USER
useradd -g $USER -G filetransfer -d $HOMEDIR/ -s /usr/sbin/nologin $USER
passwd $USER

### 2.1 Allow PasswordAuthentication through SSH
cat >> /etc/ssh/sshd_config  << EOL
Match User $USER
PasswordAuthentication yes
EOL

## 3. Adding PHP-FPM Pool
cat > /etc/php5/fpm/pool.d/$DOMAIN.conf << EOL
[$USER]
user = $USER
group = $USER
listen = $HOMEDIR/tmp/php-fpm-$USER.sock
listen.owner = $USER
listen.group = $USER
listen.mode = 0666
pm = dynamic
pm.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 3
pm.max_requests = 500
chdir = /
php_admin_value[open_basedir] = $HOMEDIR/public_html:$HOMEDIR/tmp:/usr/share/php5:/usr/share/php
php_admin_value[disable_functions] = apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode, symlink
php_flag[expose_php] = off
php_value[memory_limit] = 128M
php_admin_value[upload_tmp_dir] = "$HOMEDIR/tmp/"
EOL

## 4. Setting up nginx vhost
cat > /etc/nginx/sites-available/$DOMAIN << EOL
server
{
   listen 80;
   listen [::]:80;
   server_name $DOMAIN www.$DOMAIN;
   client_max_body_size 20m;
   client_body_buffer_size 128k;
   access_log $HOMEDIR/logs/access.log;
   error_log $HOMEDIR/logs/error.log;
   root $HOMEDIR/public_html;
   add_header X-Frame-Options SAMEORIGIN;
   index index.html index.htm index.php;

   location ~ /\.
   {
      access_log off;
      log_not_found off;
      deny all;
   }

   ## Only allow these request methods ##
   if (\$request_method !~ ^(GET|HEAD|POST)$ )
   {
      return 444;
   }
   ## Do not accept DELETE, SEARCH and other methods ##

   # Pass all .php files onto a php-fpm/php-fcgi server.
   location ~ \.php$
   {
      # Important, don't remove for security reasons
      try_files \$uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
      fastcgi_pass unix:$HOMEDIR/tmp/php-fpm-$USER.sock;
   }
}
EOL

### 4.1 Enable the vhost
ln -s /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN

## 5. Setting permissions
chown -R $USER:www-data $HOMEDIR/logs/
chown -R $USER:www-data $HOMEDIR/public_html/
chown -R $USER:www-data $HOMEDIR/tmp
chmod 0710 $HOMEDIR/logs
chmod 0710 $HOMEDIR/public_html/
chmod 0710 $HOMEDIR/tmp/

## Restarting Services
/etc/init.d/php5-fpm restart
/etc/init.d/nginx reload
/etc/init.d/ssh try-restart


Als er nog vragen zijn hoor ik het graag :)


- Niels

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 2 gasten