Skip to content

Instantly share code, notes, and snippets.

@vanyasem
Last active January 21, 2018 22:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vanyasem/6e893bd2ca373f1a895ad4852437b478 to your computer and use it in GitHub Desktop.
Save vanyasem/6e893bd2ca373f1a895ad4852437b478 to your computer and use it in GitHub Desktop.
Ubuntu Server 16.04 - Deploy Nextcloud
# Server Config: Pentium D 945 2 cores, 1 Gb DDR2 RAM, WD 750 Gb SATA HDD
# Installs:
# Nextcloud (Apache + PHP 7, MariaDB)
# Collabora Online Development Edition (CODE) via Docker
# LetsEncrypt with Apache support
read -p 'Nextcloud domian: ' nextclouddomian
read -p 'Nextcloud domian escaped (i.e: nextcloud\\.domian\\.org): ' collaboradomianescaped
read -p 'Collabora domian: ' collaboradomian
read -p 'Server Admin Email: ' adminemail
read -p 'MySQL root password: ' sqlroot
sudo add-apt-repository -y ppa:dawidd0811/neofetch
sudo apt update
sudo apt install -y tree htop neofetch
sudo apt install -y linux-image-extra-$(uname -r) linux-image-extra-virtual aufs-tools
curl https://get.docker.com | bash
sudo apt install -y unzip
sudo apt install -y letsencrypt python-letsencrypt-apache
sudo apt install -y apache2 mariadb-server libapache2-mod-php7.0
sudo apt install -y php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring
sudo apt install -y php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip
sudo apt upgrade -y
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_http
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.2.zip -O ~/nextcloud.zip
unzip ~/nextcloud.zip -d ~/
sudo cp -r ~/nextcloud /var/www
# for nginx: https://icewind.nl/entry/collabora-online/
sudo su -c 'echo """<VirtualHost *:80>
ServerName $nextclouddomian
ServerAdmin $adminemail
DocumentRoot /var/www/nextcloud/
ErrorLog /error.log
CustomLog /access.log combined
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_headers.c>
Header always set Strict-Transport-Security \"max-age=15552000; includeSubDomains\"
</IfModule>
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
</VirtualHost>""" > /etc/apache2/sites-available/nextcloud.conf'
sudo a2ensite /etc/apache2/sites-available/nextcloud.conf
sudo su -c 'echo """opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1""" >> /etc/php/7.0/apache2/php.ini'
sudo su -c 'echo """<VirtualHost *:80>
ServerName $collaboradomian
AllowEncodedSlashes NoDecode
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
ProxyPreserveHost On
ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet
ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery
ProxyPassMatch \"/lool/(.*)/ws$\" wss://127.0.0.1:9980/lool/$1/ws nocanon
ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws
ProxyPass /lool https://127.0.0.1:9980/lool
ProxyPassReverse /lool https://127.0.0.1:9980/lool
</VirtualHost>""" > /etc/apache2/sites-available/codeserver.conf'
sudo a2ensite /etc/apache2/sites-available/codeserver.conf
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo letsencrypt --apache -d $nextclouddomian -m $adminemail --agree-tos --hsts
sudo letsencrypt --apache -d $collaboradomian -m $adminemail --agree-tos --hsts
sudo mkdir /etc/systemd/system/docker.service.d
sudo su -c 'echo """[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper -H fd://""" > /etc/systemd/system/docker.service.d/DeviceMapper.conf'
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables --skip-networking &
sudo mysql -uroot
# use mysql;
# update user set password=PASSWORD("$sqlroot") where User='root';
# flush privileges;
# quit
sudo systemctl start mysql
sudo mysql
# use mysql;
# update user set plugin='' where User='root';
# flush privileges;
# exit
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
sudo systemctl restart mysql
sudo systemctl restart apache2
sudo docker pull collabora/code
sudo docker run -t -d -p 127.0.0.1:9980:9980 -e \
"$collaboradomianescaped" --restart always --cap-add MKNOD collabora/code
sudo apt autoremove -y
# sudo scp -r user@domain:/path/to/nextcloud /var/www
# sudo -u www-data php occ files:scan
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo nano /var/www/nextcloud/config/config.php
# 'htaccess.RewriteBase' => '/',
sudo -u www-data php occ maintenance:update:htaccess
crontab -e
# 15 5 * * 5 letsencrypt renew >> /var/log/le-renew.log
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment