# wisko ## Getting to a Shell ### Hardware wisko is a higher-end 1-CPU Digital Ocean droplet. * 1 CPU * 50 GB SSD * 2 GB RAM IP address: 159.65.75.41 ### Spin Up Hardware * Follow the Digital Ocean steps to spin up a droplet in the SF region. * Once the droplet is created, get the IP address. * Pro tip: find your ssh key in `~/.ssh/id_rsa.pub` and paste it in during the Droplet creation process to avoid password issues. ### Set DNS Records Add the following DNS records: **A Record**: * Record: none (set to @ automatically) * Value: 138.68.10.168 **A Record**: * Record: git * Value: 138.68.10.168 **CNAME Record**: * Record: ### Connect to Droplet Check that the Droplet has been booted and is listening: ```plain $ ping -c 4 138.68.10.168 PING 138.68.10.168 (138.68.10.168): 56 data bytes 64 bytes from 138.68.10.168: icmp_seq=0 ttl=56 time=28.494 ms 64 bytes from 138.68.10.168: icmp_seq=1 ttl=56 time=26.120 ms 64 bytes from 138.68.10.168: icmp_seq=2 ttl=56 time=25.972 ms 64 bytes from 138.68.10.168: icmp_seq=3 ttl=56 time=27.232 ms --- 138.68.10.168 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 25.972/26.955/28.494/1.014 ms ``` Now connect to the droplet. By default, you log in as as the root user: ``` $ ssh root@138.68.10.168 [...bunch of login stuff...] root@ubuntu-s-1vcpu-2gb-sfo2-01:~# ``` Now we're ready to get started. ## Prepare for LAMP [See DO guide](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04) ### Make Normal User Add a non-root user: ``` adduser melo passwd melo usermod -aG sudo melo ``` (While we're at it, create a git user as well for gitea): ``` adduser git passwd git ``` Prepare to SSH as that user: ``` mkdir /home/melo/.ssh chown melo:melo /home/melo/.ssh chmod 700 /home/melo/.ssh chmod 600 /home/melo/.ssh/authorized_key ``` SSH as this user in a separate window (keep one window open and logged in as root!), and test sudo abilities: ``` sudo whoami ``` Disable root login via ssh: ``` vim /etc/ssh/sshd_config ``` Change `PermitRootLogin` to `no`. Restart SSH service: ``` sudo service ssh restart ``` Now log out and log back in as user melo. ### Dotfiles Bootstrap [Dotfiles link](https://charlesreid1.com:3000/dotfiles/wisko/src/master/install_packages.sh) Start out with the wisko dotfiles repository: ``` apt-get install git cd ~ git clone https://charlesreid1.com:3000/dotfiles/wisko.git cd wisko ``` Prepare for bootstrap: ``` ./pre_bootstrap.sh ``` Now bootstrap: ``` ./bootstrap.sh ``` Then set the machine name: ``` sudo ./set_machine_name.sh ``` Now log out and log back in. ### Aptitude Install a bunch of the packages that are needed: ``` cd wisko sudo ./install_packages.sh ``` Now we're ready to start on the LAMP server. ## Installing Apache ``` sudo apt-get install -y apache2 ``` Edit Apache config file: ``` sudo vim /etc/apache2/sites-enabled/000-default.conf ``` Set the server name: ``` ServerName www.allthehatsformaps.com ... DocumentRoot /var/www/htdocs/ ``` Also make note of Apache username, should be `www-data`. Check for syntax errors: ``` sudo apache2ctl configtest ``` Restart Apache: ``` sudo service apache2 restart ``` ## Installing MySQL ``` sudo apt-get install -y mysql-server ``` This will ask you to set a root password. Once the installation is complete, run: ``` mysql_secure_installation ``` to lock down MySQL. Do not configure `VALIDATE PASSWORD PLUGIN`. ## Installing PHP ``` sudo apt-get install -y php libapache2-mod-php php-mcrypt php-mysql php-cli ``` Make Apache look for `index.php` by editing: ``` /etc/apache2/mods-enabled/dir.conf ``` and changing: ``` DirectoryIndex index.html ``` to this: ``` DirectoryIndex index.php index.html ``` Restart apache: ``` sudo service apache2 restart ``` ## Installing Wordpress [boom](https://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Installation) Download latest Wordpress: ``` cd /tmp wget https://wordpress.org/latest.tar.gz tar xzf latest.tar.gz ``` This extracts to `wordpress/`. Now open MySQL and create a database for wordpress: ``` $ mysql -u root -p mysql> CREATE DATABASE wordpress; mysql> CREATE USER 'wpsql'@'localhost' IDENTIFIED BY "yourpasswordgoeshere"; mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wpsql"@"localhost" ``` This creates a MySQL user `wpsql` and a MySQL database called `wordpress`. Configure Wordpress by copying example config file to actual config file: ``` cp wp-config-sample.php wp-config.php ``` Edit `wp-config.php` and change the following: * DB_NAME * DB_USER * DB_PASSWORD * DB_HOST * DB_CHARSET * DB_COLLATE Use [online secret generator](https://api.wordpress.org/secret-key/1.1/salt/) to set secret key values. Now move the wordpress folder to your web root: ``` mv wordpress /var/www/htdocs/wordpress/ ``` Change permissions so wordpress directory is owned by the Apache user: ``` chown -R www-data:www-data /var/www/htdocs/wordpress ``` Visit the Wordpress site and set it up: ``` <ip-addr-of-machine>/wordpress ``` Once you have set up the Wordpress site, you should protect the `wp-config.php` file: ``` sudo chown melo:melo wp-config.php ``` ### FTP Server To upgrade Wordpress you need an ftp server running. vsftpd is a lightweight ftp server. To install it: ``` sudo apt-get install vsftpd ``` By default, the `local_enable` option is set in `/etc/vsftpd.conf`, meaning you can log in to the ftp server using system credentials. To check and make sure the process of uploading files via FTP works, try upgrading a plugin or installing/removing a plugin. ## Installing Gitea ### Goenv: To Manage Go Version Start by installing goenv: ``` git clone https://github.com/syndbg/goenv.git ~/.goenv ``` Now add .goenv to your path in .bash_profile so goenv is a command ``` # add these line to ~/.bash_profile export GOENV_ROOT="$HOME/.goenv" export PATH="$GOENV_ROOT/bin:$PATH" ``` Now source it: ``` source ~/.bash_profile ``` List latest versions of go: ``` goenv install -l ``` Pick one to install: ``` goenv install 1.7.5 goenv global 1.7.5 ``` Now set this as the go version: ``` eval "$(goenv init -)" ``` You will need to execute the above command **each time you wish to use the goenv version of Go.** (Alternatively, you can add it to `.bashrc` to run it in each new shell.) ### Gitea: Git Web Server [Installation of gitea from source](https://docs.gitea.io/en-us/install-from-source/) ``` go get -d -u code.gitea.io/gitea cd $GOPATH/src/code.gitea.io/gitea ``` Now check out the version of gitea that you want to use: ``` git branch -a git checkout origin/release/v1.2 ``` Build with tag `bindata`: ``` TAGS="bindata" make generate build ``` The gitea binary is entirely self-contained. Before you run the binary, create a folder for gitea to use to store repositories (this should be somewhere you have read/write access, like `~/.gitea`): ``` mkdir ~/.gitea ``` We will point gitea to this directory in the next step. To run the binary from the current directory as the current user: ``` ./gitea web ``` Now you can navigate to `<server-ip-address>:3000` to set up gitea. ### Set Up Gitea (via Browser) Visit `<server-ip-address>:3000` in the browser to set up Gitea. You will need to set up a database, and we can use MySQL again. First, create a gitea user in MySQL: ``` $ mysql -u root -p mysql> CREATE DATABASE gitea; mysql> CREATE USER 'giteasql'@'localhost' IDENTIFIED BY "yourpasswordgoeshere"; mysql> GRANT ALL PRIVILEGES ON gitea.* TO "giteasql"@"localhost" ``` Now you should be able to punch in all your settings. Make sure you change the address of the app from `localhost:3000` to `<server-ip-address>:3000`. ### Updating Configuration/Templates The path where gitea is installed is here: ``` /home/melo/gocode/src/code.gitea.io/gitea ``` available as a shortcut in the home directory: ``` $ ll ~/ ... lrwxrwxrwx 1 melo melo 30 Feb 24 22:17 gitea -> gocode/src/code.gitea.io/gitea/ ``` Configuration file for gitea is located here: ``` ~/gitea/custom/conf/app.ini ``` If you change the config file or any page templates, you will have to re-build the binary for the changes to take effect. To rebuild the go binary, just set your go version with goenv and re-execute the make command from above: ``` eval "$(goenv init -)" cd ~/gitea TAGS="bindata" make generate build ``` ### Errors Note: if you see the following error, check which version of go you are using: ``` go build -i -v -tags 'bindata' -ldflags '-s -w -X "main.Version=1.2.3" -X "main.Tags=bindata"' -o gitea vendor/code.gitea.io/git/command.go:9:2: cannot find package "context" in any of: /home/melo/gocode/src/code.gitea.io/gitea/vendor/context (vendor tree) /usr/lib/go-1.6/src/context (from $GOROOT) /home/melo/gocode/src/context (from $GOPATH) Makefile:205: recipe for target 'gitea' failed make: *** [gitea] Error 1 ``` When you run `which go` you should see ``` $ which go /home/melo/.goenv/shims/go ``` If you see this, you will have problems: ``` $ which go /usr/bin/go ```