===== Anchor CMS ===== Ubuntu 18.04 Server installation tutorial for Anchor CMS. ==== Package installation ==== sudo apt install nginx mariadb-server sudo apt install php7.2 php7.2-curl php7.2-gd php7.2-mbstring php7.2-mysql mcrypt needs to be installed manually with pecl sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo apt-get -y install php7.2-dev sudo apt-get -y install libmcrypt-dev Make sure you sudo pecl search mcrypt to find the newest version even though it is out of support sudo pecl install mcrypt-1.0.3 ==== Setup the database ==== sudo mysql_secure_installation Answer all the questions as shown below: Enter current password for root (enter for none): Set root password? [Y/n]: Y Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: Y Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y Log in to the mysql console sudo mysql -u root -p Create the database and the admin user. CREATE DATABASE anchordb; GRANT ALL ON anchordb.* TO 'dbadmin' IDENTIFIED BY '4L94jSPEZC9eNpWAHdRLWtPfRVeBLrei'; FLUSH PRIVILEGES; ==== Let's Encrypt ==== For SSL use the EFF's PPA for the Let's Encrypt certbot. sudo add-apt-repository ppa:certbot/certbot sudo apt upgrade sudo apt install python-certbot-nginx sudo certbot --nginx certonly Cert and Key locations: /etc/letsencrypt/live/sub.domain.tld/fullchain.pem /etc/letsencrypt/live/sub.domain.tld/privkey.pem By default, a generic DH key is used which weakens the key exchange. Generate a non-generic Diffie-Hellman key with OpenSSL, the line in the Nginx configuration file has already been added in the config below. sudo openssl dhparam -dsaparam -out /etc/ssl/dhparam.pem 4096 ==== Configuring Nginx ==== server { listen 80; server_name blog.arctic.cat; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name blog.arctic.cat; ssl_certificate /etc/letsencrypt/live/blog.arctic.cat/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.arctic.cat/private.key; ssl_session_timeout 5m; ssl_ecdh_curve prime256v1; ssl_session_tickets off; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:AES256+EECDH:AES256+EDH:!aNULL'; ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2; ssl_dhparam /etc/ssl/dhparam.pem; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains;"; add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; #add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "none" always; add_header X-XSS-Protection "1; mode=block" always; root /var/www/anchor; index index.php index.html; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } Before testing the config, you need to increase the ''server_names_hash_bucket_size'' in ''/etc/nginx/nginx.conf'' to 64, it should be commented out be default. Be sure to test the config. sudo nginx -t ==== Install PHP Composer ==== Composer will allow us to install Anchor in a single line. Follow the instructions found here: https://getcomposer.org/download/ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer ==== Install Anchor CMS ==== Make the webroot directory for anchor apply ownership to your current user. sudo mkdir -p /var/www/anchor sudo chown -R {your_user}:{your_user} /var/www/anchor cd /var/www/anchor This was supposed to be rather quick, but due to a syntax error in the anchor config, it will require a few more additional commands. composer create-project anchorcms/anchor-cms ./ The above command will error out, but you just need to edit one line in ''composer.json'' sudo vim /var/www/anchor/composer.json - "type": "CMS", + "type": "cms", Now install anchor. composer install ==== Permissions ==== Change the permissions for the anchor web root to www-data sudo chown -R www-data:www-data /var/www/anchor Create some other directory that I have no real idea what it does. sudo mkdir -p /var/lib/php/session && sudo chown -R www-data:www-data /var/lib/php ==== Let's Go! ==== I usually reboot for good measure just to make sure reboots are handled properly. sudo reboot