#!/bin/bash # # seafile-server-installer/seafile-server-community_ubuntu-trusty-amd64 # # Copyright 2015, Alexander Jackson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # #set -x # ------------------------------------------- # Vars # ------------------------------------------- SEAFILE_ADMIN=admin@seafile.local SEAFILE_USER=seafile SERVER_NAME=$(hostname -s) IP_OR_DOMAIN=$(hostname -i) HOSTNAME=$(hostname -i) FILESERVER_PORT=8082 SERVER_PORT=10001 SEAFILE_SERVER_PORT=12001 # ------------------------------------------- # Seafile Server Community Edition on Ubuntu Trusty (64bit) # ------------------------------------------- clear cat < /dev/null 2>&1 ; then echo " Aborting because user ${SEAFILE_USER} already exist" ; exit 1 fi # ------------------------------------------- # Abort if directory /opt/seafile/ exists # ------------------------------------------- if [[ -d "/opt/seafile/" ]] ; then echo " Aborting because directory /opt/seafile/ already exist" ; exit 1 fi # ------------------------------------------- # Update System # ------------------------------------------- aptitude update && aptitude dist-upgrade -y # ------------------------------------------- # Ensure aptitude is installed # ------------------------------------------- apt-get install aptitude -y # ------------------------------------------- # Additional requirements # ------------------------------------------- aptitude install sudo python-setuptools python-simplejson python-imaging python-mysqldb \ openjdk-7-jre memcached python-memcache pwgen curl openssl -y # ------------------------------------------- # NGINX # ------------------------------------------- cat > /etc/apt/sources.list.d/nginx.list < /etc/nginx/conf.d/seafile.conf <<'EOF' server { listen 80; server_name ""; return 301 https://$http_host$request_uri?; } server { listen 443 spdy; server_name ""; ssl on; ssl_certificate /etc/nginx/ssl/seafile.crt; ssl_certificate_key /etc/nginx/ssl/seafile.key; location / { fastcgi_pass 127.0.0.1:8000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; } location /media { root /opt/seafile/seafile-server-latest/seahub; } location /seafdav { fastcgi_pass 127.0.0.1:8080; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS on; client_max_body_size 0; access_log /var/log/nginx/seafdav.access.log; error_log /var/log/nginx/seafdav.error.log; } } EOF mkdir /etc/nginx/ssl openssl genrsa -out /etc/nginx/ssl/seafile.key 4096 openssl req -new -x509 -key /etc/nginx/ssl/seafile.key -out /etc/nginx/ssl/seafile.crt -days 10950 -batch service nginx restart # ------------------------------------------- # MariaDB # ------------------------------------------- DEBIAN_FRONTEND=noninteractive aptitude install mariadb-server -y SQLROOTPW=$(pwgen) mysqladmin -u root password $SQLROOTPW cat > /root/.my.cnf < /etc/init.d/seafile-server <<'EOF' #!/bin/bash ### BEGIN INIT INFO # Provides: seafile-server # Required-Start: $remote_fs $syslog mysql # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Seafile server # Description: Start Seafile server ### END INIT INFO # Author: Alexander Jackson # # Change the value of "user" to your linux user name user=seafile # Change the value of "seafile_dir" to your path of seafile installation seafile_dir=/opt/seafile script_path=${seafile_dir}/seafile-server-latest seafile_init_log=${seafile_dir}/logs/seafile.init.log seahub_init_log=${seafile_dir}/logs/seahub.init.log # Change the value of fastcgi to true if fastcgi is to be used fastcgi=true # Set the port of fastcgi, default is 8000. Change it if you need different. fastcgi_port=8000 case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log} sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile-server {start|stop|restart}" exit 1 ;; esac EOF chmod +x /etc/init.d/seafile-server update-rc.d seafile-server defaults # ------------------------------------------- # Seafile # ------------------------------------------- adduser --system --gecos "${SEAFILE_USER}" ${SEAFILE_USER} --home /opt/seafile mkdir -p /opt/seafile/installed cd /opt/seafile/ curl -OL https://download.seafile.com.de/seafile-server_latest_x86-64.tar.gz tar xzf seafile-server_latest_x86-64.tar.gz SEAFILE_VERSION=$(basename /opt/seafile/seafile-server-* | awk -F'-' ' { print $3 }') mv seafile-server_latest_x86-64.tar.gz installed/seafile-server_${SEAFILE_VERSION}_x86-64.tar.gz # ------------------------------------------- # Seafile DB # ------------------------------------------- SQLSEAFILEPW=$(pwgen) cat > /opt/seafile/.my.cnf < "${DEFAULT_CCNET_CONF_DIR}/seafile.ini" # ------------------------------------------- # Configure Seafile WebDAV Server(SeafDAV) # ------------------------------------------- mkdir -p ${DEFAULT_CONF_DIR} cat > ${DEFAULT_CONF_DIR}/seafdav.conf < "${DEST_SETTINGS_PY}" # ------------------------------------------- # prepare avatar directory # ------------------------------------------- mkdir -p "${TOPDIR}/seahub-data" mv "${ORIG_AVATAR_DIR}" "${DEST_AVATAR_DIR}" ln -s ../../../seahub-data/avatars ${MEDIA_DIR} # ------------------------------------------- # create logs directory # ------------------------------------------- mkdir -p "${TOPDIR}/logs" # ------------------------------------------- # Create symlink for current server version # ------------------------------------------- ln -s $(basename ${INSTALLPATH}) ${SEAFILE_SERVER_SYMLINK} # Fix permissions chmod 0600 "$DEST_SETTINGS_PY" chmod 0700 "$DEFAULT_CCNET_CONF_DIR" chmod 0700 "$SEAFILE_DATA_DIR" chmod 0700 "$DEFAULT_CONF_DIR" # ------------------------------------------- # copy user manuals to library template # ------------------------------------------- mkdir -p ${LIBRARY_TEMPLATE_DIR} cp -f ${SRC_DOCS_DIR}/*.doc ${LIBRARY_TEMPLATE_DIR} # ------------------------------------------- # Configuring ccnet.conf # ------------------------------------------- SEAFILESQLPW=$(grep password /opt/seafile/.my.cnf | awk -F'=' {'print $2'}) cat >> ${DEFAULT_CCNET_CONF_DIR}/ccnet.conf <> ${DEST_SETTINGS_PY} < ${seafile_dir}/aio_seafile-server.log<