Ghost for Journalism
ghost.org
ghost.org
Not sure Medium is cutting back on efforts, though, as much as they are trying for a new business model that doesn't rely so much on advertising.
As a rule Ghost tries to have write permission to core dependencies including bookshelf so there is no danger of it or any other package threatening the future of the project.
Besides, the beauty of an open source stack is there's always the ability to fork - worse comes to worst.
I have considered using static-site generators but honestly I love the user interfaces of blogging platforms like ghost.
I use svbtle for now though, until I find something that I can actually run on my servers.
https://blog.cagedmonster.net/deploy-ghost-blogging-platform...
phobos :: ~/Ghost » npm install --production
npm WARN prefer global forever@0.15.3 should be installed with -g
npm WARN unmet dependency /home/dijit/Ghost/node_modules/amperize requires image-size@'0.5.0' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/image-size,
npm WARN unmet dependency which is version 0.5.1
npm WARN unmet dependency /home/dijit/Ghost/node_modules/ghost-gql requires lodash@'3.10.1' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/lodash,
npm WARN unmet dependency which is version 4.17.4
npm WARN unmet dependency /home/dijit/Ghost/node_modules/knex-migrator requires bluebird@'3.4.6' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/bluebird,
npm WARN unmet dependency which is version 3.4.7
npm WARN unmet dependency /home/dijit/Ghost/node_modules/knex-migrator requires debug@'2.2.0' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/debug,
npm WARN unmet dependency which is version 2.6.0
npm WARN unmet dependency /home/dijit/Ghost/node_modules/amperize/node_modules/nock/node_modules/chai/node_modules/deep-eql requires type-detect@'0.1.1' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/amperize/node_modules/nock/node_modules/chai/node_modules/type-detect,
npm WARN unmet dependency which is version 1.0.0
npm WARN unmet dependency /home/dijit/Ghost/node_modules/brute-knex/node_modules/ghost-ignition requires debug@'2.2.0' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/debug,
npm WARN unmet dependency which is version 2.6.0
npm WARN unmet dependency /home/dijit/Ghost/node_modules/brute-knex/node_modules/ghost-ignition requires prettyjson@'1.1.3' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/prettyjson,
npm WARN unmet dependency which is version 1.2.1
npm WARN unmet dependency /home/dijit/Ghost/node_modules/ghost-editor/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/babel-core requires
npm WARN unmet dependency /home/dijit/Ghost/node_modules/bluebird,
npm WARN unmet dependency which is version 3.4.7
npm WARN unmet dependency /home/dijit/Ghost/node_modules/ghost-editor/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/babel-core requires
npm WARN unmet dependency /home/dijit/Ghost/node_modules/lodash,
npm WARN unmet dependency which is version 4.17.4
npm WARN unmet dependency /home/dijit/Ghost/node_modules/passport-ghost/node_modules/ghost-ignition requires debug@'2.2.0' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/debug,
npm WARN unmet dependency which is version 2.6.0
npm WARN unmet dependency /home/dijit/Ghost/node_modules/passport-ghost/node_modules/ghost-ignition requires prettyjson@'1.1.3' but will load
npm WARN unmet dependency /home/dijit/Ghost/node_modules/prettyjson,
npm WARN unmet dependency which is version 1.2.11. Downloaded install60.iso from one of the OpenBSD mirror sites.
2. Created VM with virtual network adapter attached to host network interface bridged (which I only ever rarely do so it also requires that I `doas service vboxnet onestart`) and installed OpenBSD on it. This took only a few minutes, I was impressed by how quick the installer config steps for OpenBSD were.
3. Ejected install CD ISO and rebooted.
4. Attempted to install Ghost.
# uname -a
OpenBSD web-test.my.domain 6.0 GENERIC#2148 amd64
# pkg_add node
Can't find node
:/Instructions probably presume that one is familiar with OpenBSD. That's fair. Been a while since last time I used it but it's a well documented system so finding out what to do did not take much time; I needed to copy the sample pkg config file and uncommented the installpath for a country near me.
# cp /etc/examples/pkg.conf /etc/
# vi /etc/pkg.conf
Continued. # pkg_add node sqlite3-tcl curl
# pkg_add unzip
Ambiguous: choose package for unzip
a 0: <None>
1: unzip-6.0p9
2: unzip-6.0p9-iconv
Your choice: 1
unzip-6.0p9: ok
Although not needed for the task of installing Ghost, I added git, bash, tree and vim while here. # pkg_add git bash tree
# pkg_add vim
Ambiguous: choose package for vim
a 0: <None>
1: vim-7.4.1467p1-gtk2
2: vim-7.4.1467p1-gtk2-lua
3: vim-7.4.1467p1-gtk2-perl-python-ruby
4: vim-7.4.1467p1-gtk2-perl-python3-ruby
5: vim-7.4.1467p1-no_x11
6: vim-7.4.1467p1-no_x11-lua
7: vim-7.4.1467p1-no_x11-perl-python-ruby
8: vim-7.4.1467p1-no_x11-perl-python3-ruby
9: vim-7.4.1467p1-no_x11-ruby
Your choice: 5
vim-7.4.1467p1-no_x11: ok
And switched the shell for the non-privileged user I created during install. # chsh -s /usr/local/bin/bash web
In a real production environment I think it would probably be better to run the server under the OpenBSD-provided "www"-user and to run the database under a separate user and then to pledge(2) the web server so that it could only read web files and communicate with the database and pledge(2) the database so that it could only communicate with the web server and read/write the db files. Something like that. Anyway as I said, I just want to test Ghost on OpenBSD quickly so I'm not going to dive into pledge(2) since that would take extra time that I don't want to spend right now.Created directory for web files.
# mkdir -p /var/www/blog/
# chown web:www /var/www/blog/
Switched to said user and then proceeded. $ curl -LOk https://ghost.org/zip/ghost-latest.zip
$ cd /var/www/blog/
$ unzip ~/ghost-latest.zip
$ rm ~/ghost-latest.zip
Created config from sample file and edited it. $ cp config.example.js config.js
$ vim config.js
The only change I made was to set the production URL to www-ghost.example.com instead of my-ghost-blog.com and I changed the listen address from 127.0.0.1 to 0.0.0.0.On my host machine I added an entry in /etc/hosts pointing www-ghost.example.com to the IP of the OpenBSD VM.
Completed install of Ghost and ran it.
$ npm install sqlite3 --sqlite=/usr/local
$ npm install --production
$ npm install forever
$ NODE_ENV=production ./node_modules/forever/bin/forever start index.js
And then there we have it, both the blog itself http://i.imgur.com/2rBhtdl.png and the admin interface http://i.imgur.com/OqQdvoE.png are working as they should.