From 32073781142342d878e37c1dca018de3e6ccac82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 13:29:22 +0100 Subject: [PATCH 1/8] Enable nginx, replace favicon, update docs --- Procfile.example | 2 +- doc/prepare.md | 15 ++++++++------- nginx/conf/nginx.conf.example | 4 ++++ nginx/favicon-gdk.ico | Bin 0 -> 5430 bytes 4 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 nginx/favicon-gdk.ico diff --git a/Procfile.example b/Procfile.example index 94c61da..5823682 100644 --- a/Procfile.example +++ b/Procfile.example @@ -12,5 +12,5 @@ rails-background-jobs: exec /usr/bin/env SIDEKIQ_LOG_ARGUMENTS=1 RAILS_ENV=devel #influxdb: exec influxdb/bin/influxd -config influxdb/influxdb.conf #grafana: exec support/wait-postgresql-ready support/exec-cd grafana bin/grafana-server -config grafana.ini #sshd: exec /usr/sbin/sshd -e -D -f /home/git/openssh/sshd_config -#nginx: exec nginx -p /home/git/nginx -c conf/nginx.conf +nginx: exec nginx -p /home/git/nginx -c /home/git/nginc/conf/nginx.conf #gitaly: exec /usr/bin/env GITALY_SOCKET_PATH=/home/git/gitaly.socket GITALY_PROMETHEUS_LISTEN_ADDR=:9101 gitaly/bin/gitaly diff --git a/doc/prepare.md b/doc/prepare.md index 60a827f..be1ac29 100644 --- a/doc/prepare.md +++ b/doc/prepare.md @@ -49,6 +49,7 @@ We are using PostgreSQL-9.5 in the following example. If you want to use another ``` sudo port install git redis libiconv postgresql95-server icu pkgconfig cmake nodejs4 go openssl npm2 +sudo port install nginx +ssl bundle config build.eventmachine --with-cppflags=-I/opt/local/include/openssl sudo npm install phantomjs-prebuilt@2.1.12 -g echo 'export PATH=/opt/local/lib/postgresql95/bin/:$PATH' >> ~/.profile @@ -65,7 +66,7 @@ sudo apt-get install software-properties-common python-software-properties # This PPA contains an up-to-date version of Go sudo apt-add-repository -y ppa:ubuntu-lxc/lxd-stable sudo apt-get update -sudo apt-get install git postgresql postgresql-contrib libpq-dev redis-server libicu-dev cmake g++ nodejs nodejs-legacy npm libkrb5-dev golang ed pkg-config +sudo apt-get install git postgresql postgresql-contrib libpq-dev redis-server libicu-dev cmake g++ nodejs nodejs-legacy npm libkrb5-dev golang ed pkg-config nginx npm install phantomjs-prebuilt@2.1.12 -g ``` @@ -74,7 +75,7 @@ npm install phantomjs-prebuilt@2.1.12 -g Please read [the prerequisites for all platforms](#prerequisites-for-all-platforms). ``` -pacman -S postgresql redis postgresql-libs icu nodejs ed cmake openssh git go +pacman -S postgresql redis postgresql-libs icu nodejs ed cmake openssh git go nginx npm install phantomjs-prebuilt@2.1.12 -g ``` @@ -83,7 +84,7 @@ npm install phantomjs-prebuilt@2.1.12 -g Please read [the prerequisites for all platforms](#prerequisites-for-all-platforms). ``` -sudo apt-get install postgresql postgresql-contrib libpq-dev redis-server libicu-dev cmake g++ nodejs npm libkrb5-dev ed pkg-config +sudo apt-get install postgresql postgresql-contrib libpq-dev redis-server libicu-dev cmake g++ nodejs npm libkrb5-dev ed pkg-config nginx-full ``` If you are running Debian Stretch or newer you will need to install Go @@ -108,7 +109,7 @@ You may need to install Redis 2.8 or newer manually. We assume you are using Fedora >= 22. ``` -sudo dnf install postgresql libpqxx-devel postgresql-libs redis libicu-devel nodejs git ed cmake rpm-build gcc-c++ krb5-devel go postgresql-server postgresql-contrib +sudo dnf install postgresql libpqxx-devel postgresql-libs redis libicu-devel nodejs git ed cmake rpm-build gcc-c++ krb5-devel go postgresql-server postgresql-contrib nginx ``` Install `phantomJS` manually, or download it and put in your $PATH. For @@ -125,7 +126,7 @@ This is tested on CentOS 6.5: ``` sudo yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm sudo yum install https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm -sudo yum install postgresql93-server libicu-devel cmake gcc-c++ redis ed fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6 golang nodejs +sudo yum install postgresql93-server libicu-devel cmake gcc-c++ redis ed fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6 golang nodejs nginx sudo rvm install 2.3 sudo rvm use 2.3 @@ -156,7 +157,7 @@ sudo zypper dup sudo zypper install libxslt-devel postgresql postgresql-devel libpqxx-devel redis libicu-devel nodejs git ed cmake \ rpm-build gcc-c++ krb5-devel go postgresql-server postgresql-contrib \ - libxml2-devel libxml2-devel-32bit findutils-locate + libxml2-devel libxml2-devel-32bit findutils-locate nginx sudo npm install -g phantomjs ``` @@ -189,7 +190,7 @@ Please read [the prerequisites for all platforms](#prerequisites-for-all-platfor ``` sudo pkg install postgresql93-server postgresql93-contrib postgresql-libpqxx \ -redis go node icu krb5 phantomjs gmake +redis go node icu krb5 phantomjs gmake nginx ``` ### Other platforms diff --git a/nginx/conf/nginx.conf.example b/nginx/conf/nginx.conf.example index 372e43f..800ec61 100644 --- a/nginx/conf/nginx.conf.example +++ b/nginx/conf/nginx.conf.example @@ -44,6 +44,10 @@ http { ssl_certificate /home/git/localhost.crt; ssl_certificate_key /home/git/localhost.key; + location ~* favicon.*\.ico$ { + alias /home/git/nginx/favicon-gdk.ico; + } + location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; diff --git a/nginx/favicon-gdk.ico b/nginx/favicon-gdk.ico new file mode 100644 index 0000000000000000000000000000000000000000..0de682e31d7bf898f4a385ca6b885d5b93c4a4c9 GIT binary patch literal 5430 zcmcgwdv8=l6km-WfRE6>?yit%j6z}z7D1?m1kpw+EfEO_TY36G1O&pP^%1l@8X#0a z8+oY&`XXw5AoT$T5slKCVvKDmZMQ7DvfXyKbLV)@+?~01@4drzMVaJe&OP%xkD0so zoHH8;+!44lFlI~u=Yl}^u0X&D1Of#G*7H%6zk{+6%8*5bCCABkfM)O!6H-<6kba{P zh|g#6ND^5235W&fAe8}|dlL9Sa#SYxPkq299sy>og5FRu^o6Dio;`dN_{Bc04bC~3 zhueUSdk^tjAZ<JcouNXcNrGp_R<ULtX#>JK2Ok;%bM+b2+mEyZDGWD^GU&V;^^u5Y zMg`JNr2Sy7X$3w!B24hEzk$uFNBIGyeMl>i!Vn40RQkk|%v!6(8L>~)1Mj{8v@c7S ze6K?a!-%mMx<iwdKJg^8Y!HU9Xru5Lu&0|W-gqms9)>~V8Ko=tkVKiKPjL_y^~;*U z-1jr`yOEwpqO~wYgHL+&Nha4V>~1h?e*xYRg<)eE(tJhzMf0Jjcy1Pv%!wf#{>OFk zF0M?Sqx=!?em`{3B)jrxslxRXl_^}bYNwJ%D|b3yZ5AKhy4}XTUZd8AzB{kv#Oub; zH$T|8vp*^rPp6@4e6b+nb%Uo6cmHG1HDLzuwDtRu*vQI_K$L4lmam6_7dLreiKZ4v zG`4u;Zb72qGZ<|CLWzBoLLNfOGX+SKkSHJNhH{uE!%Yt99iKqDrUi(<orA}Qfh}x; zc(5F4F0jR?fX9b#O9=eZ0I(?^;y1Ti<iNhr48gOh9|3Q__P@qpp6md2&->`F5_9Jw zkwdLKx(H=e!0xRBv+?qO9s^G^FgJgXJ}@^KyO1if@^Hc^7cyql2#i^IHt*V`3!3*0 zI&x_(+Fyy3oyP})j|-W#Mi`8<ycu|8P-k{ja(=!S*h5tFXx~KZk^Jhw6h|G{VB;rZ zZM>kbjk+L2&8+(k*w}-%En}PTP5zU{JeBY4Ix<hKGvjSr59_XZ=#t9GI-gR`lUQ?K zK8^aBS|;|r2cMTH`~G#PM6EMpDe`-f<hfyO#yU>*{APpy6$du+ghP+?DUMZ0Rt=<j z+Y_4R+5gp0k-}J5(sAwqZOy`d2m1oQ!B2Mrd*B1qkul48OP1YXV}aGbWO@*J{?yZ? za81T(&Dh(x?M*lYytPY(K)KVbxd1FE{W)i==W*JM2WNZsE@OxXOI`kDZ{)OzeCPm} zdoGIKg!#(X-WWy9)H5x2*$a!DC;ho+D;HYt$&Q)&uFN;-Itz1cE3ol?XHM^Jt;e^@ zdG529&)8FrU|zI+%UIT-%=KHKSROnKY{}=i<~kqaO&=TCy{CKc^4ZFT(yw#Q^ma~P zE4~Et<KJEWvwJ@0UYxzF^yi-KT<G*oJbk}p+ukeH6LBX{zrA;H{Us!~t~cko{mSR= zkTVy$?U3!vdk7r_9vu?j0eh+;6W1nR-xQBu&XYdfGhzMqV97RHzUDNkZ_wO*5oOgk z(edxS-G1fs^`J8sy3c@~w~PK>24J@JL&A6#sa#9Zh3lZdV$G;1x?ru=j^$%M-Vf|v zMfC7f^m*mV<k_RHAG9Z7udqa$r+TJ&?-J3?)ml8Q<vXrz*rvBvwaa5J*?LZkPo6pF z!RHbrzxq~d&+jh7hg0GXB7Z}2rh5sk<vYye5Om$=t&?5jr{f*R|1K0+_L?VVlKtD! zU-7Ef-U}PG<`TzGdGLwj&02h}g&W5jy!Prp)vB>b6gtOFvUQMW5&JvQDry#3Z^X7m zHEP@=z@jk?+7kDcRwy0fZ*^QP!T(z_^|7~nX-;$Ty>$v7-&2<pp9>JHIcVFfJ)8>; zsrJhXpK81HyG-iWc4aT!@n=r|B6nfF%Qxrg49i^Tm-BQwvF)`GtFF~8=Pkd!Z7;-j O9q`rD{V#C4<o^Hwaujj^ literal 0 HcmV?d00001 -- GitLab From 5be3647007444a9a5153e73ae0132d979040e13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 13:41:08 +0100 Subject: [PATCH 2/8] no SSL on :3080 --- nginx/conf/nginx.conf.example | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/nginx/conf/nginx.conf.example b/nginx/conf/nginx.conf.example index 800ec61..b0ff392 100644 --- a/nginx/conf/nginx.conf.example +++ b/nginx/conf/nginx.conf.example @@ -38,6 +38,27 @@ http { '' close; } + server { + listen 127.0.0.1:3080; + + location ~* favicon.*\.ico$ { + alias /home/git/nginx/favicon-gdk.ico; + } + + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set-header Connection $connection_upgrade; + + proxy_read_timeout 300; + + proxy_pass http://gitlab-workhorse; + } + } + server { listen 127.0.0.1:3443 ssl; -- GitLab From 00cffe666a971ab9d12440e140bd013ddc20e272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 14:26:35 +0100 Subject: [PATCH 3/8] Always rebuild nginx-config --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 7a5d78e..7892a4f 100644 --- a/Makefile +++ b/Makefile @@ -252,6 +252,7 @@ openssh/ssh_host_rsa_key: nginx-setup: nginx/conf/nginx.conf nginx/logs nginx/tmp +.PHONY: nginx/conf/nginx.conf nginx/conf/nginx.conf: sed -e "s|/home/git|${gitlab_development_root}|" nginx/conf/nginx.conf.example > $@ -- GitLab From e149fe5f8b021f660058c581266f7616dfab1ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 14:27:06 +0100 Subject: [PATCH 4/8] use relative path or nginx craps out --- Procfile.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile.example b/Procfile.example index 5823682..7c7f671 100644 --- a/Procfile.example +++ b/Procfile.example @@ -12,5 +12,5 @@ rails-background-jobs: exec /usr/bin/env SIDEKIQ_LOG_ARGUMENTS=1 RAILS_ENV=devel #influxdb: exec influxdb/bin/influxd -config influxdb/influxdb.conf #grafana: exec support/wait-postgresql-ready support/exec-cd grafana bin/grafana-server -config grafana.ini #sshd: exec /usr/sbin/sshd -e -D -f /home/git/openssh/sshd_config -nginx: exec nginx -p /home/git/nginx -c /home/git/nginc/conf/nginx.conf +nginx: exec nginx -p /home/git/nginx -c conf/nginx.conf #gitaly: exec /usr/bin/env GITALY_SOCKET_PATH=/home/git/gitaly.socket GITALY_PROMETHEUS_LISTEN_ADDR=:9101 gitaly/bin/gitaly -- GitLab From eb24268c25b3421d7558ddae52e0d4ac447a9d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 14:27:26 +0100 Subject: [PATCH 5/8] disable TLS since nginx fails w/o the cert-files --- nginx/conf/nginx.conf.example | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/nginx/conf/nginx.conf.example b/nginx/conf/nginx.conf.example index b0ff392..d52520e 100644 --- a/nginx/conf/nginx.conf.example +++ b/nginx/conf/nginx.conf.example @@ -51,31 +51,7 @@ http { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; - proxy_set-header Connection $connection_upgrade; - - proxy_read_timeout 300; - - proxy_pass http://gitlab-workhorse; - } - } - - server { - listen 127.0.0.1:3443 ssl; - - ssl_certificate /home/git/localhost.crt; - ssl_certificate_key /home/git/localhost.key; - - location ~* favicon.*\.ico$ { - alias /home/git/nginx/favicon-gdk.ico; - } - - location / { - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Upgrade $http_upgrade; - proxy_set-header Connection $connection_upgrade; + proxy_set_header Connection $connection_upgrade; proxy_read_timeout 300; -- GitLab From c78d3c98cad4b65030a330474a4a7c28579413ba Mon Sep 17 00:00:00 2001 From: Dimitrie Hoekstra <dimitrie@gitlab.com> Date: Mon, 30 Jan 2017 13:45:04 +0000 Subject: [PATCH 6/8] Update prepare.md with nginx for homebrew --- doc/prepare.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/prepare.md b/doc/prepare.md index be1ac29..0ea90d6 100644 --- a/doc/prepare.md +++ b/doc/prepare.md @@ -38,7 +38,7 @@ Please read [the prerequisites for all platforms](#prerequisites-for-all-platfor ``` brew tap homebrew/dupes brew tap homebrew/versions -brew install git redis postgresql libiconv icu4c pkg-config cmake nodejs go openssl node npm +brew install git redis postgresql libiconv icu4c pkg-config cmake nodejs go openssl node npm nginx bundle config build.eventmachine --with-cppflags=-I/usr/local/opt/openssl/include npm install phantomjs-prebuilt@2.1.12 -g ``` -- GitLab From 2dc0bd5d2909966cb0c9eb636a07e786754d718e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?= <kim.carlbacker@gmail.com> Date: Mon, 30 Jan 2017 17:40:41 +0100 Subject: [PATCH 7/8] use absolute path for favicon --- nginx/conf/nginx.conf.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nginx/conf/nginx.conf.example b/nginx/conf/nginx.conf.example index d52520e..684dfb8 100644 --- a/nginx/conf/nginx.conf.example +++ b/nginx/conf/nginx.conf.example @@ -41,7 +41,7 @@ http { server { listen 127.0.0.1:3080; - location ~* favicon.*\.ico$ { + location ~* /assets/favicon.*\.ico$ { alias /home/git/nginx/favicon-gdk.ico; } -- GitLab From 0b718f910eee7a2bb1399926323b041ca27a7d22 Mon Sep 17 00:00:00 2001 From: dimitrieh <dimitriehoekstra@gmail.com> Date: Mon, 30 Jan 2017 18:58:27 +0100 Subject: [PATCH 8/8] updated favicon to include transparancy and be blue --- nginx/favicon-gdk.ico | Bin 5430 -> 5430 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 nginx/favicon-gdk.ico diff --git a/nginx/favicon-gdk.ico b/nginx/favicon-gdk.ico old mode 100644 new mode 100755 index 0de682e31d7bf898f4a385ca6b885d5b93c4a4c9..71acdf670ab48827376ef071657da6d7fa9e306f GIT binary patch literal 5430 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 OiaL_NMKKZNFv&ls2@&uB literal 5430 zcmcgwdv8=l6km-WfRE6>?yit%j6z}z7D1?m1kpw+EfEO_TY36G1O&pP^%1l@8X#0a z8+oY&`XXw5AoT$T5slKCVvKDmZMQ7DvfXyKbLV)@+?~01@4drzMVaJe&OP%xkD0so zoHH8;+!44lFlI~u=Yl}^u0X&D1Of#G*7H%6zk{+6%8*5bCCABkfM)O!6H-<6kba{P zh|g#6ND^5235W&fAe8}|dlL9Sa#SYxPkq299sy>og5FRu^o6Dio;`dN_{Bc04bC~3 zhueUSdk^tjAZ<JcouNXcNrGp_R<ULtX#>JK2Ok;%bM+b2+mEyZDGWD^GU&V;^^u5Y zMg`JNr2Sy7X$3w!B24hEzk$uFNBIGyeMl>i!Vn40RQkk|%v!6(8L>~)1Mj{8v@c7S ze6K?a!-%mMx<iwdKJg^8Y!HU9Xru5Lu&0|W-gqms9)>~V8Ko=tkVKiKPjL_y^~;*U z-1jr`yOEwpqO~wYgHL+&Nha4V>~1h?e*xYRg<)eE(tJhzMf0Jjcy1Pv%!wf#{>OFk zF0M?Sqx=!?em`{3B)jrxslxRXl_^}bYNwJ%D|b3yZ5AKhy4}XTUZd8AzB{kv#Oub; zH$T|8vp*^rPp6@4e6b+nb%Uo6cmHG1HDLzuwDtRu*vQI_K$L4lmam6_7dLreiKZ4v zG`4u;Zb72qGZ<|CLWzBoLLNfOGX+SKkSHJNhH{uE!%Yt99iKqDrUi(<orA}Qfh}x; zc(5F4F0jR?fX9b#O9=eZ0I(?^;y1Ti<iNhr48gOh9|3Q__P@qpp6md2&->`F5_9Jw zkwdLKx(H=e!0xRBv+?qO9s^G^FgJgXJ}@^KyO1if@^Hc^7cyql2#i^IHt*V`3!3*0 zI&x_(+Fyy3oyP})j|-W#Mi`8<ycu|8P-k{ja(=!S*h5tFXx~KZk^Jhw6h|G{VB;rZ zZM>kbjk+L2&8+(k*w}-%En}PTP5zU{JeBY4Ix<hKGvjSr59_XZ=#t9GI-gR`lUQ?K zK8^aBS|;|r2cMTH`~G#PM6EMpDe`-f<hfyO#yU>*{APpy6$du+ghP+?DUMZ0Rt=<j z+Y_4R+5gp0k-}J5(sAwqZOy`d2m1oQ!B2Mrd*B1qkul48OP1YXV}aGbWO@*J{?yZ? za81T(&Dh(x?M*lYytPY(K)KVbxd1FE{W)i==W*JM2WNZsE@OxXOI`kDZ{)OzeCPm} zdoGIKg!#(X-WWy9)H5x2*$a!DC;ho+D;HYt$&Q)&uFN;-Itz1cE3ol?XHM^Jt;e^@ zdG529&)8FrU|zI+%UIT-%=KHKSROnKY{}=i<~kqaO&=TCy{CKc^4ZFT(yw#Q^ma~P zE4~Et<KJEWvwJ@0UYxzF^yi-KT<G*oJbk}p+ukeH6LBX{zrA;H{Us!~t~cko{mSR= zkTVy$?U3!vdk7r_9vu?j0eh+;6W1nR-xQBu&XYdfGhzMqV97RHzUDNkZ_wO*5oOgk z(edxS-G1fs^`J8sy3c@~w~PK>24J@JL&A6#sa#9Zh3lZdV$G;1x?ru=j^$%M-Vf|v zMfC7f^m*mV<k_RHAG9Z7udqa$r+TJ&?-J3?)ml8Q<vXrz*rvBvwaa5J*?LZkPo6pF z!RHbrzxq~d&+jh7hg0GXB7Z}2rh5sk<vYye5Om$=t&?5jr{f*R|1K0+_L?VVlKtD! zU-7Ef-U}PG<`TzGdGLwj&02h}g&W5jy!Prp)vB>b6gtOFvUQMW5&JvQDry#3Z^X7m zHEP@=z@jk?+7kDcRwy0fZ*^QP!T(z_^|7~nX-;$Ty>$v7-&2<pp9>JHIcVFfJ)8>; zsrJhXpK81HyG-iWc4aT!@n=r|B6nfF%Qxrg49i^Tm-BQwvF)`GtFF~8=Pkd!Z7;-j O9q`rD{V#C4<o^Hwaujj^ -- GitLab