diff --git a/README.md b/README.md index c2b8f898..1a9b8fd8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@ You can create your own custom version of spee.ch by installing this code base a ## Quick start -### Prepare your environment +_note: this is the quickstart guide, for an in-depth step-by-step overview visit the [fullstart guide](https://github.com/lbryio/speech/fullstart.md)._ + Install Node * [link](https://nodejs.org) @@ -27,8 +28,6 @@ Clone this repo $ git clone https://github.com/lbryio/spee.ch.git ``` -### Build and Start the App - Change directory into your project ``` $ cd spee.ch @@ -45,29 +44,22 @@ $ npm run configure ``` _note: add your ip address in `config/siteConfig.json` after completion_ -Build the app -(transpile source with babel and bundle with webpack) -``` -$ npm run build -``` - -start the app +Build & start the app ``` $ npm run start ``` -### View in browser -visit [localhost:3000](http://localhost:3000) in your browser +view in browser + * visit [http://localhost:3000](http://localhost:3000) in your browser -### (optional) add custom components and update the styles +(optional) add custom components and update the styles * create custom components by creating React components in `src/views/` (further instructions coming soon) * update the css by changing the files in `public/assets/css/` (further instructions and refactor coming soon) -### (optional) Syncing the full blockchain -Start the `spee.ch-sync` tool available at [billbitt/spee.ch-sync](https://github.com/billbitt/spee.ch-sync) - -This is not necessary, but highly reccomended. It will decode the blocks of the `LBRY` blockchain and add the claims information to your database's tables +(optional) Syncing the full blockchain + * Start the `spee.ch-sync` tool available at [billbitt/spee.ch-sync](https://github.com/billbitt/spee.ch-sync) + * This is not necessary, but highly reccomended. It will decode the blocks of the `LBRY` blockchain and add the claims information to your database's tables ## API * _(post)_ /api/claim/publish @@ -110,13 +102,67 @@ Spee.ch also runs a sync tool, which decodes blocks from the `LBRY` blockchain a * [react](https://reactjs.org/) -### Architecture -* the `server/` folder contains all of the server code - * `index.js` is the entry point for the server. It creates the [express app](https://expressjs.com/), requires the routes, syncs the database, and starts the server listening on the `PORT` designated in the config file. - * the `server/routes` folder contains all of the routes for the express app - * the `server/models` folder contains all of the models which the app uses to interact with the `mysql` database. Note: this app uses the [sequelize](http://docs.sequelizejs.com/) ORM. -* the `client/` folder contains all of the client code +### Architecture +* `cli/` contains the code for the cli tool. Running the tool will create `.json` config files and place them in the `config/` folder + * `configure.js` is the entry point for the cli tool + * `cli/defaults/` holds default config files + * `cli/questions/` holds the questions that the cli tool asks to build the config files + +* `client/` contains all of the client code + * The client side of spee.ch uses `React` and `Redux` + * `client/src/index.js` is the entry point for the client side js. It checks for preloaded state, creates the store, and places the `` component in the document. + * `client/src/app.js` holds the `` component, which contains the routes for `react-router-dom` + * `client/src/` contains all of the JSX code for the app. When the app is built, the content of this folder is transpiled into the `client/build/` folder. + * The Redux code is broken up into `actions/` `reducers/` and `selectors/` + * The React components are broken up into `containers/` (components that pull props directly from the Redux store), `components/` ('dumb' components), and `pages/` + * spee.ch also uses sagas which are in the `sagas/` folders and `channels/` + * `client/scss/` contains the css for the project + * + +* `client_custom` is a folder which can be used to override the default components in `client/` + * The folder structure mimics that of the `client/` folder + * to customize spee.ch, place your own components ans scss in the `client_custom/src/` and `client_custom/scss` folders. + +* `server/` contains all of the server code + * `index.js` is the entry point for the server. It creates the [express app](https://expressjs.com/), requires the routes, syncs the database, and starts the server listening on the `PORT` designated in the config files. + * `server/routes/` contains all of the routes for the express app + * `server/controllers/` contains all of the controllers for all of the routes + * `server/models/` contains all of the models which the app uses to interact with the `MySQL` database. + * Spee.ch uses the [sequelize](http://docs.sequelizejs.com/) ORM for communicating with the database. + +* `tests/` holds the end-to-end tests for this project + * Spee.ch uses `mocha` with the `chai` assertion library + * unit tests are located inside the project in-line with the files being tested and are designtated with a `xxxx.test.js` file name +### Tests +* This package uses `mocha` with `chai` for testing. +* Before running tests, create a `testingConfig.js` file in `devConfig/` by copying `testingConfig.example.js` +* To run tests: + * To run all tests, including those that require LBC (like publishing), simply run `npm test` + * To run only tests that do not require LBC, run `npm run test:no-lbc` + +### URL formats +Spee.ch has a few types of url formats that return different assets from the LBRY network. Below is a list of all possible urls for the content on spee.ch +* retrieve the controlling `LBRY` claim: + * https://spee.ch/`claim` + * https://spee.ch/`claim`.`ext` (serve) +* retrieve a specific `LBRY` claim: + * https://spee.ch/`claim_id`/`claim` + * https://spee.ch/`claim_id`/`claim`.`ext` (serve) +* retrieve all contents for the controlling `LBRY` channel + * https://spee.ch/`@channel` +* a specific `LBRY` channel + * https://spee.ch/`@channel`:`channel_id` +* retrieve a specific claim within the controlling `LBRY` channel + * https://spee.ch/`@channel`/`claim` + * https://spee.ch/`@channel`/`claim`.`ext` (serve) +* retrieve a specific claim within a specific `LBRY` channel + * https://spee.ch/`@channel`:`channel_id`/`claim` + * https://spee.ch/`@channel`:`channel_id`/`claim`.`ext` (serve) + +### Bugs +If you find a bug or experience a problem, please report your issue here on github and find us in the lbry discord! + ### Issue tags in this repo #### level 1 Issues that anyone with basic web development can handle; little-to-no experience with the spee.ch codebase is required. @@ -129,32 +175,3 @@ Familiarity with the spee.ch code base and how the lbry daemon functions is requ #### level 4 Issues with lbry (e.g. the spee.ch wallet, lbrynet configuration, etc.) that require strong familiarity with the lbry daemon and/or network to fix. Generally these issues are best suited for the `lbry` `protocol team` but are reported in this repo because of they are part of the spee.ch implementation - -### Tests -* This package uses `mocha` with `chai` for testing. -* Before running tests, create a `testingConfig.js` file in `devConfig/` by copying `testingConfig.example.js` -* To run tests: - * To run all tests, including those that require LBC (like publishing), simply run `npm test` - * To run only tests that do not require LBC, run `npm run test:no-lbc` - -### URL formats -Below is a list of all possible urls for the content on spee.ch -* controlling, free `LBRY` claim - * spee.ch/claim (show) - * spee.ch/claim.ext (serve) -* specific `LBRY` claim - * spee.ch/claim_id/claim - * spee.ch/claim_id/claim.ext -* all free contents for the controlling `LBRY` channel - * spee.ch/@channel -* a specific `LBRY` channel - * spee.ch/@channel:channel_id -* a specific claim within the controlling `LBRY` channel - * spee.ch/@channel/claim (show) - * spee.ch/@channel/claim.ext (serve) -* a specific claim within a specific `LBRY` channel - * spee.ch/@channel:channel_id/claim - * spee.ch/@channel:channel_id/claim.ext - -## Bugs -If you find a bug or experience a problem, please report your issue here on github and find us in the lbry discord! diff --git a/customize.md b/customize.md new file mode 100644 index 00000000..090772d3 --- /dev/null +++ b/customize.md @@ -0,0 +1,73 @@ +# Configure your own spee.ch + +## * Change some **css** + + * Navigate to *public/assets/css* folder and open **general.css** for editing. +`$ cd public/assets/css` +`$ nano general.css` + + * Add `background-color: yellow;` to the `html, body` declaration. +```css +html, body { +margin: 0; +padding: 0; +height: 100%; +word-wrap: break-word; +background-color: yellow; +} +``` +* + * Restart the server, and you should see your site with a yellow background! +`$ npm run start:dev` + +* Update the custom **About** Page component + * Most of the components used by [www.spee.ch](http://www.spee.ch) are taken from the spee.ch-components repo, but you can override those components by defining your own locally. As part of the [www.spee.ch](http://www.spee.ch) repo, a local custom **About** page is already included. You can edit the contents of this component in the *src/views/pages/* folder. + `$ cd src/views/pages/AboutPage` + `$ nano index.jsx` + + * Change the text, or edit the **HTML** however you like. + * Restart the server, and you should see your site with an updated **About** page! + `$ npm run start:dev` + +* Add a new custom Logo component. + + * To create your own custom component to override the defaults, create a folder and **index.jsx** file for the component in the *src/views/components* folder. + + `$ cd src/views/components` + `$ mkdir Logo` + `$ cd Logo` + `$ touch index.jsx` + `$ nano index.jsx` + + * Create a simple react component in **index.jsx**. +```js +import React from 'react'; +function Logo () { +return ( +

My Logo

+); +}; +export default Logo; +``` +* + * Restart the server, and you should see your site with a new Logo in the top left corner! +`$ npm run start:dev` + +**__4. Bonus:__** + +* [Install PM2](http://pm2.keymetrics.io/docs/usage/quick-start/) and run your server with PM2. + +* Install PM2. +`$ sudo npm i -g pm2` + +* From inside your project’s folder, start your server with PM2. +`$ pm2 start server.js` + * Visit your site and see if it is running! + +* Sync Your Spee.ch Instance with the full **Blockchain** + + * Install **lbrycrdd**. + * Install **lbry-decoder**. + * Start **lbry-decoder**. + * Install & run [spee.ch-sync](https://github.com/billbitt/spee.ch-sync) + * Configure **spee.ch-sync**. diff --git a/fullstart.md b/fullstart.md new file mode 100644 index 00000000..69219932 --- /dev/null +++ b/fullstart.md @@ -0,0 +1,171 @@ +# Create Your Own Spee.ch! + +## 1. Prerequisites +### You will need the following tools installed + +* Node (v8 LTS). +* Make sure you install from the **Node** website [link](https://nodejs.org/en/download/). +* npm (should come installed with Node). +* Git +* Curl +* Tmux +* Unzip + +### Make sure **npm** is up-to-date. +``` +$ npm update +``` + +### Setup a Webserver to serve **Spee.ch** from Port **3000**. +* If you are using a server provided by **lbry**, we will have **caddy** installed already. +* If you are using your own server, make sure to have a web server installed and set up to serve from port **3000**. +* Nginx instructions (recommended). + * Insert directions for certbot before installing. + * Install [Nginx](http://nginx.org/en/docs/install.html). + * Create a config file called `spee.ch` in */etc/nginx/sites-available* + * see example: [config file](https://github.com/lbryio/spee.ch/nginx_example_config). + * Rename all mentions of *sub.domain.com* with your subdomain name. + * Run this command to link the sites-available. + + `$ ln -s /etc/nginx/sites-available/speech /etc/nginx/sites-enabled/speech` + + * Restart Nginx. + + `$ sudo service nginx restart` + + * Try visiting your website. + * If Nginx is working, you should get a **502** error because there is nothing running on **3000** yet. + * If you get the default Nginx greeting, you have not properly configured it to serve from port **3000**. + * You can find logs in */var/log/nginx/* too. + * Caddy tutorial: [https://caddyserver.com/tutorial](https://caddyserver.com/tutorial) +### MySql + +* Install MySql + * [Instructions](https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en) +* Create user **root**. + * Note: We are going to access **mysql** as **root** for this setup, but you may want to create a separate user in the future. + * Keep your password somewhere handy! +* Create a database called **lbry** and make sure you can use it. + + `CREATE DATABASE lbry;` + + `$ USE lbry;` + + `$ exit; (or press ‘ctl + d’)` + +* Try logging into mysql. + + `$ mysql -u username -p` + +* If you are using a **LBRY** server, your **password** is the one provided for **ssh**. + * Note: If it fails, try using `sudo`. + +##2. Install & Run the LBRY Daemon + +### Install **lbrynet** +_note: if you have a server from LBRY, lbrynet is already installed, you can skip to 2.4._ +``` +$ wget --quiet -O ~/latest_daemon.zip https://lbry.io/get/lbrynet.linux.zip +$ unzip -o -u "~/latest_daemon.zip" +``` +### Start lbrynet +``` +$ tmux +$ ./lbrynet-daemon +``` + +### Detach (exit) the tmux session and leave **lbrynet** running in the background. + +press `ctrl` + `b` then `d` to detach + +### Get LBC! + +Get a list of your wallets: + +``` +$ ~/lbrynet-cli wallet_list +``` + +Send some LBC to one of the addresses from your wallet. + +Check your balance again: + +``` +$ ~/lbrynet-cli wallet_balance +``` + +You should have **LBC**! + +## 3. Set up Spee.ch + +### Clone the spee.ch repo + +``` +$ git clone https://github.com/lbryio/www.spee.ch.git +``` + +Change directory into your site’s folder + +``` +$ cd ` or `$ cd www.spee.ch +``` + +Install dependencies + +``` +$ npm install +``` + +Run the config cli: + +``` +$ npm run configure +``` + +Check your site configs +``` +$ cd config/ +$ nano siteConfig.json +``` +add your ip address in `config/siteConfig.json` + +### Build & run + +Run the below command to transpile, build, and start your server. +``` +$ npm run start +``` + +_**Note:** if you had to use `sudo` to login to **mysql** above, you may have issues with this step._ + +Spee.ch should now be running ! + +Visit your site in the browser. Try publishing an image! + + +## 4. Bonus: + +### Install PM2 and run your server with PM2 + +Install PM2 +``` +$ sudo npm i -g pm2 +``` + +From inside your project’s folder, start your server with PM2. +``` +$ pm2 start server.js +``` + +Visit your site and see if it is running! + +### Sync Your Spee.ch Instance with the full **Blockchain** + +Install **lbrycrdd** + +Install **lbry-decoder** + +Start **lbry-decoder** + +Install & run [spee.ch-sync](https://github.com/billbitt/spee.ch-sync) + diff --git a/nginx_example_config b/nginx_example_config new file mode 100644 index 00000000..4b643834 --- /dev/null +++ b/nginx_example_config @@ -0,0 +1,40 @@ +# Speech nginx configuration + +server { + listen 80; + server_name sub.domain.com; + + listen 443 ssl; + + ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/sub.domain.com/privkey.pem; + + ssl_session_cache shared:SSL:20m; + ssl_session_timeout 1440m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + # Using list of ciphers from https://github.com/cloudflare/sslconfig + ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; + + # if letsencrypt is not working, this is probably preventing it from getting to .well-known + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + +# gzip_static on; +# gzip_http_version 1.0; + + access_log /var/log/nginx/speech_nginx_access_log; + error_log /var/log/nginx/speech_nginx_error_log; + + location / { + proxy_read_timeout 5m; + proxy_pass http://127.0.0.1:3000; + 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 X-Forwarded-Port $server_port; + proxy_set_header Host $host; + proxy_pass_header Server; + } +} diff --git a/test/test-embed.html b/test/test-embed.html deleted file mode 100644 index b0953586..00000000 --- a/test/test-embed.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - Document - - - test embed - -

no identifier, no ending

- no identifier, no ending - -

no identifier, yes ending

- no identifier, yes ending - -

yes identifier, no ending

- yes identifier, no ending - -

yes identifier, yes ending

- yes identifier, yes ending - - diff --git a/test/test-iframe.html b/test/test-iframe.html deleted file mode 100644 index 86e4dbff..00000000 --- a/test/test-iframe.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - Document - - - -

i frame: weather.gov

- - -

i frame: dev1.spee.ch video direct embed page

- - -

i frame: dev1.spee.ch image direct asset

- - -

i frame: image from internet

- - -

i frame: giphy

- - -

i frame: giphy 2

- - -